package cz.pecinovsky.česky.oopnz._101_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz._000_.Run;

import cz.pecinovsky.česky.oopnz.utility.Barva;
import cz.pecinovsky.česky.oopnz.utility.IO;

/////%I+ <114
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Plátno;
/////%I-

////%I+ <110
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_01_výchozí.Trojúhelník;
/////%I-

/////%I+ >110 -014
//import cz.pecinovsky.česky.oopnz.tvary_02_znaji_rozhraní.Přesouvač;
//
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Elipsa;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Obdélník;
//import cz.pecinovsky.česky.oopnz.tvary_03_implementují_ITvar.Trojúhelník;
/////%I-

import cz.pecinovsky.česky.oopnz.správce.Elipsa;
import cz.pecinovsky.česky.oopnz.správce.Obdélník;
import cz.pecinovsky.česky.oopnz.správce.Trojúhelník;

import cz.pecinovsky.česky.oopnz.správce.Přesouvač;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class Obličej_107_114
{    private Obličej_107_114() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Testovací třída {@code Obličej} slouží ke komplexnímu otestování
 * třídy ...
 * rodiny tříd ...
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Obličej extends junit.framework.TestCase
{
//%A+ >109
    private Elipsa   tělo;
//%A-
    private Obdélník hlava;
    private Elipsa   levéOko;
    private Elipsa   pravéOko;
    private Elipsa   nos;
    private Elipsa   pusa;


//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *
     * @param název  Název konstruovaného testu
     */
    public Obličej(String název)
    {
        super(název);
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Vytvoření přípravku (fixture), tj. sady objektů, s nimiž budou všechny
     * testy pracovat a která se proto vytvoří před spuštěním každého testu.
     */
    @Override
    protected void setUp()
    {
//%A+ >109
        tělo     = new Elipsa  (  0, 225, 300, 150, Barva.ZELENÁ);
//%A-
        hlava    = new Obdélník( 50,  50, 200, 200);
        levéOko  = new Elipsa  ( 75,  75,  25,  25);
        pravéOko = new Elipsa  (200,  75,  25,  25);
        nos      = new Elipsa  (125,  75,  50,  75);
        pusa     = new Elipsa  ( 75, 175, 150,  50);
//%A+ >114
        hlava   .nakresli();
        levéOko .nakresli();
        pravéOko.nakresli();
        nos     .nakresli();
        pusa    .nakresli();
//%A-
        IO.zpráva("Obličej připraven");
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    @Override
    protected void tearDown()
    {
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== VLASTNÍ TESTY =============================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }

    public void testÚsměv()
    {
        pusa.setPozice(75, 150);
        pusa.setRozměr(150, 100);
        Obdélník ret = new Obdélník( 75, 150, 150, 50);
//%A+ >114
        ret.nakresli();
//%A-
    }

//%A+ >108

    public void testMrkni()
    {
        Barva hBarva = hlava  .getBarva();
        Barva oBarva = levéOko.getBarva();
        levéOko.setBarva(hBarva);
        IO.čekej(250);
        levéOko.setBarva(oBarva);
    }

//%A-
//%A+ >=110z

    public void testČepice()
    {
        Trojúhelník čepice = new Trojúhelník(50, 0, 200, 50);
        čepice.setPozice(50, -50);
//%A-
//%A+ >114
        čepice.nakresli();
//%A-
//%A+ >=110z
        Přesouvač přes = new Přesouvač(5);
        přes.přesunO(0, 50, čepice);
    }

//%A-
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
////////////////////////////////////////////////////////////////////////////////
//== TESTY A METODA MAIN =======================================================
//Není-li třída testovací, následující dvě metody se smažou
//%X+   Metoda připravená k vložení do testovacích tříd
     /** */
     public void testPřípravek() {}
//%X-


    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void ukliď()
        {
//            Plátno.smažPlátno();
            SprávcePlátna.getInstance().odstraňVše();
        }
    }


    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Run.tests(Obličej.class,
                new TearDown(),
//                "testPřípravek",
//                "testÚsměv",
//                "testMrkni",
                "testČepice",
                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
